package juc.thread_communicate;

import java.util.concurrent.locks.LockSupport;

/**
 * LockSupport是JDK中用来实现线程阻塞和唤醒的工具，
 * 线程调用park则等待“许可”，调用unpark则为指定线程提供“许可”。
 * 使用它可以在任何场合使线程阻塞，可以指定任何线程进行唤醒，
 * 并且不用担心阻塞和唤醒操作的顺序，但要注意连续多次唤醒的效果和一次唤醒是一样的。
 */
public class LockSupportTest {

    public static void main(String[] args) throws InterruptedException {
        Thread parkThread = new Thread(new ParkThread());
        parkThread.start();

        Thread.sleep(5);
        System.out.println("唤醒parkThread");
        LockSupport.unpark(parkThread);
    }

    static class ParkThread implements Runnable {

        @Override
        public void run() {
            System.out.println("ParkThread开始执行");
            LockSupport.park();
            System.out.println("ParkThread执行完成");
        }
    }
}